package com.cskaoyan.object;

/*

        protected void finalize() (不重要)
        a. 当垃圾回收器确定不存在对该对象的更多引用时（对象何时变成垃圾）
        b. 由对象的垃圾回收器调用此方法。
        c. 子类重写 finalize 方法，以配置系统资源或执行其他清除。

        在实际开发中，不会使用finalize方法

 比如：  当我们要执行一些IO，或者是网络通信的功能的时候，其实我们jvm是借助操作系统，
          内核的完成的，所以当我们执行这些功能的时候，我们的java程序，
          需要占用一定的操作系统资源，

          所以，我们希望，当我们的程序使用完毕，操作系统资源的时候，即使释放资源

          什么时候，能安全的释放系统资源呢？ 当使用资源的对象变成垃圾

          finalize方法刚刚好，就是在对象变成垃圾，并且，被垃圾回收期回收的时候，会调用这个方法，
          但是，因为垃圾回收期回收垃圾对象的，回收时机 不确定

 */
public class Demo3finalize {

    public static void main(String[] args) {
        FinalizeClass a = new FinalizeClass();
        System.out.println(a);
        // 不让a指向堆上的对象
        a = null;

        // 该方法的作用，通过代码触发垃圾回收器的执行
        System.gc();

    }


}

class FinalizeClass {

    // 如果在对象中，占用了操作系统资源

    @Override
    protected void finalize() throws Throwable {
        // 在该方法中，释放操作系统资源
        System.out.println("finalize");
    }

}


